变量
局部变量
局部变量必须以标记@作为前缀 ，如@age 局部变量的使用是先声明，再赋值 局部变量只在定义它的局部范围内有效

声明一个局部变量：declare @变量名 数据类型

--例：
	declare @id int --声明一个名为id的整型变量
	declare @name varchar(50)  --声明一个可变长度为50的存放姓名的字符串变量
赋值：

set @变量名 = 值

select @变量名 = 值

--例:
	select @id = 1001
	set @name = '张三'
set与select赋值的区别：

set赋值给变量指定的值，select一般用于表中查询出的数据赋值给变量，如果查询结果有多条，取最后一条赋值给变量

全局变量
全局变量必须以标记@@作为前缀，如@@version 全局变量由系统定义和维护，我们只能读取，不能修改全局变量的值 全局变量在整个SQL环境下都可以被访问或调用

--@@ERROR：返回执行的上一个语句的错误号
--@@IDENTITY：返回最后插入的标识值
--@@MAX_CONNECTIONS：返回允许同时进行的最大用户连接数
--@@ROWCOUNT：返回受上一语句影响的行数
--@@SERVERNAME：返回运行 SQL Server 的本地服务器的名称
--@@SERVICENAME：返回 SQL Server 正在其下运行的注册表项的名称
--@@TRANCOUNT：返回当前连接的活动事务数
--@@LOCK_TIMEOUT：返回当前会话的当前锁定超时设置（毫秒）
输出语句
print变量或表达式
select变量或表达式
--例:
	print '数据库服务器名:' + @@servicename
	select 15*8
使用convert函数
​ 由于PRINT 命令向客户端返回一个结果的字符串的信息。 如果变量值不是字符串的话必须先用数据类型转换函数 CONVERT 将其转换为字符串。

--显示自动编号
print 	'当前自动编号的值:' + convert(varchar(10),@@IDENTITY)
cast(字段名 as 数据类型)

逻辑控制语句
if条件分支
! [1662377697247] (E:\专业课\SQL sever\02-变量与逻辑控制\1662377697247.png)

循环控制语句
! [1662377859010] (E:\专业课\SQL sever\02-变量与逻辑控制\1662377859010.png)

while：可以通过break和continue控制循环语句中的执行。
逻辑控制语句 switch case
! [1662377940867] (E:\专业课\SQL sever\02-变量与逻辑控制\1662377940867.png)

批处理语句
go语句特点:

等待go语句前的代码执行完成后，再执行go后面的代码。
批处理语句的结束标志。
--下面的@num变量作用域为全局
--declare @num int
--set @num = 0

--下面的@num变量的作用域是局部，只在两个go之间可以使用，最后一行代码会报错
--.........sql代码
--go
--declare @num int
--set @num = 0
--go
--set @num = 1
总结
变量的使用。 要先用DECLARE 关键字声明，然后用SET或SELECT赋值。 局部变量前必须有 “@” 作前缀，全局变量必须有 “@@” 作前缀。 变量的输出可以用：PRINT或SELECT语句。 逻辑控制语句提供了条件操作所需的顺序和逻辑。 了解T-SQL编写工具。 批处理可以提高语句执行的效率，使用“GO”作为结束标志。